package com.leetcode.tree;

/**
 * @Author zhang.xin
 * @Description: 利用递归的方式
 * @Date 2019/12/27
 */
public class LeetCode101_2 {

    /**
     * 采用递归的方法进行遍历，判断
     * @param root 根节点
     * @return 返回是否镜像
     */
    public boolean isSymmetric(TreeNode root) {
        if (root == null)
            return true;

        if (root.left == null && root.right == null) {
            return true;
        }

        if (root.left !=null && root.right!= null) {
            return isChildrenSysmmetric(root.left, root.right);
        } else {
            return false;
        }
    }

    /**
     * 左子树的左边和右子树的右边，左子树的右子树和右子树的左子树
     * @param left 左子树
     * @param right 右子树
     * @return 是否镜像
     */
    private boolean isChildrenSysmmetric(TreeNode left, TreeNode right) {

        if (left == null && right == null) {
            return true;
        }

        if (left == null || right == null ) {
            return false;
        }

        if (left.val == right.val) {
            return isChildrenSysmmetric(left.left, right.right)
                    && isChildrenSysmmetric(left.right, right.left);
        } else {
            return false;
        }
    }

}
